home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / e / capus2.lha / capus2 / CxXref / Sources / WBGuide.e < prev    next >
Encoding:
Text File  |  1995-03-30  |  5.7 KB  |  202 lines

  1. /*======<<< Peps Header >>>======
  2.  PRGVERSION '0'
  3.  ================================
  4.  PRGREVISION '3'
  5.  ================================
  6.  AUTHOR      'NasGûl'
  7.  ===============================*/
  8. /*======<<<   History   >>>======
  9.  0.1 - Display DataTypes on the WB screen.
  10.        (Amigaguide,Gif,Bmp,etc...)
  11.  0.2 - Multi Arg (the last document quit all documents).
  12.  0.3 - Add Xref Arguments.
  13.  ===============================*/
  14.  
  15.  
  16. MODULE 'amigaguide','libraries/amigaguide'
  17. MODULE 'exec/lists','exec/nodes'
  18. MODULE 'intuition/intuitionbase'
  19.  
  20. CONST DEBUG=FALSE
  21. ENUM ASYNC,NOASYNC
  22.  
  23. OBJECT filenode
  24.     node:ln
  25.     newag:LONG
  26.     handle:LONG
  27. ENDOBJECT
  28.  
  29. PMODULE 'Pmodules:PlistNoSort'
  30. PMODULE 'PModules:DWriteF'
  31.  
  32. DEF mylist:PTR TO lh
  33. DEF req=FALSE
  34. DEF screen=NIL
  35. DEF xr=FALSE
  36. /*"main()"*/
  37. PROC main()
  38.     DEF test,rdargs=NIL,myargs:PTR TO LONG
  39.     DEF source[80]:STRING
  40.     DEF marg:PTR TO LONG,b,fln:PTR TO filenode
  41.     DEF intui:PTR TO intuitionbase
  42.     myargs:=[0,0,0,0]
  43.     VOID {banner}
  44.     IF amigaguidebase:=OpenLibrary('amigaguide.library',39)
  45.         IF rdargs:=ReadArgs('Amigaguide/M,Req/S,ActiveScreen/S,XRef/S',myargs,NIL)
  46.             mylist:=p_InitList()
  47.             IF myargs[1] THEN req:=TRUE
  48.             IF myargs[2]
  49.                 intui:=intuitionbase
  50.                 screen:=intui.activescreen
  51.             ENDIF
  52.             IF myargs[3] THEN xr:=TRUE
  53.             IF myargs[0]
  54.                 marg:=myargs[0]
  55.                 FOR b:=0 TO 9
  56.                     IF marg[b]<>0
  57.                         IF b=0 THEN StrCopy(source,Long(myargs[0]),ALL) ELSE StrCopy(source,marg[b],ALL)
  58.                         IF (EstrLen(source)<>0)
  59.                             fln:=New(SIZEOF filenode)
  60.                             fln.handle:=0
  61.                             fln.newag:=0
  62.                             p_AjouteNode(mylist,source,fln)
  63.                         ENDIF
  64.                     ENDIF
  65.                 ENDFOR
  66.                 IF xr=FALSE
  67.                     p_ShowFileNode(mylist)
  68.                 ELSE
  69.                     p_ShowXrefNode(mylist)
  70.                 ENDIF
  71.                 p_FreeFileNode(mylist)
  72.             ENDIF
  73.             IF rdargs THEN FreeArgs(rdargs)
  74.         ELSE
  75.         ENDIF
  76.         IF amigaguidebase THEN CloseLibrary(amigaguidebase)
  77.     ENDIF
  78.     CleanUp(0)
  79. ENDPROC
  80. /**/
  81. /*"p_ShowFileNode(list:PTR TO lh)"*/
  82. PROC p_ShowFileNode(list:PTR TO lh)
  83.     DEF count=0,b,nn:PTR TO ln
  84.     DEF key
  85.     IF key:=LockAmigaGuideBase(NIL)
  86.         count:=p_CountNodes(list)
  87.         nn:=p_GetAdrNode(list,count-1)
  88.         IF req=TRUE THEN EasyRequestArgs(0,[20,0,0,'le fichier "\s" quitte tous les documents.','Ok'],0,[nn.name])
  89.         FOR b:=0 TO count-2
  90.             p_NewShowAmigaGuideFile(p_GetAdrNode(mylist,b),ASYNC,'main',0)
  91.         ENDFOR
  92.         p_NewShowAmigaGuideFile(p_GetAdrNode(mylist,count-1),NOASYNC,'main',0)
  93.         IF key THEN UnlockAmigaGuideBase(key)
  94.     ENDIF
  95. ENDPROC
  96. /**/
  97. /*"p_ShowXrefNode(list:PTR TO lh)"*/
  98. PROC p_ShowXrefNode(list:PTR TO lh)
  99.     DEF n:PTR TO ln
  100.     DEF pn:PTR TO ln
  101.     DEF nx:PTR TO xref
  102.     DEF o:PTR TO filenode
  103.     DEF key,t,xreflist:PTR TO lh,lastnum,count=0,pv[80]:STRING
  104.     IF key:=LockAmigaGuideBase(NIL)
  105.         IF t:=GetAmigaGuideAttr(AGA_XREFLIST,NIL,xreflist)
  106.             n:=list.head
  107.             WHILE n
  108.                 IF n.succ<>0
  109.                     t:=FindName(xreflist,n.name)
  110.                     IF t<>0 THEN lastnum:=count
  111.                     count:=count+1
  112.                 ENDIF
  113.                 n:=n.succ
  114.             ENDWHILE
  115.             count:=0
  116.             n:=list.head
  117.             WHILE n
  118.                 IF n.succ<>0
  119.                     pn:=o:=n
  120.                     t:=FindName(xreflist,n.name)
  121.                     StringF(pv,'\s',n.name)
  122.                     IF t<>0
  123.                         nx:=t
  124.                         IF (count<>lastnum)
  125.                             pn.name:=nx.file
  126.                             p_NewShowAmigaGuideFile(p_GetAdrNode(mylist,count),ASYNC,pv,nx.line)
  127.                         ELSE
  128.                             pn.name:=nx.file
  129.                             p_NewShowAmigaGuideFile(p_GetAdrNode(mylist,count),NOASYNC,pv,nx.line)
  130.                         ENDIF
  131.                     ENDIF
  132.                     count:=count+1
  133.                 ENDIF
  134.                 n:=n.succ
  135.             ENDWHILE
  136.         ENDIF
  137.         IF key THEN UnlockAmigaGuideBase(key)
  138.     ENDIF
  139. ENDPROC
  140. /**/
  141. /*"p_NewShowAmigaGuideFile(of:PTR TO filenode,mode,nod)"*/
  142. PROC p_NewShowAmigaGuideFile(of:PTR TO filenode,mode,nod,lin)
  143.     DEF myag:PTR TO newamigaguide
  144.     DEF n:PTR TO ln
  145.     DEF h=0,r=NIL
  146.     DEF cmd[256]:STRING,pv[256]:STRING
  147.     IF myag:=New(SIZEOF newamigaguide)
  148.         n:=of
  149.         myag.name:=n.name
  150.         myag.node:=nod
  151.         myag.screen:=screen
  152.         myag.line:=lin
  153.         myag.flags:=HTF_CACHE_NODE+HTF_UNIQUE
  154.         myag.client:=NIL
  155.         IF mode=ASYNC
  156.             h:=OpenAmigaGuideAsync(myag,NIL)
  157.         ELSEIF mode=NOASYNC
  158.             h:=OpenAmigaGuide(myag,NIL)
  159.             CloseAmigaGuide(h)
  160.             h:=0
  161.         ENDIF
  162.         IF h<>0
  163.             StringF(pv,'Link "\s/\s"',n.name,nod)
  164.             StrCopy(cmd,pv,ALL)
  165.             Delay(10)
  166.             SendAmigaGuideCmd(h,cmd,NIL)
  167.             r:=IoErr()
  168.             IF r=0
  169.                 of.handle:=h
  170.                 of.newag:=myag
  171.                 dWriteF(['Handle \h',' Myag \h\n'],[h,myag])
  172.             ENDIF
  173.         ENDIF
  174.     ENDIF
  175.     RETURN r
  176. ENDPROC
  177. /**/
  178. /*"p_FreeFileNode(list:PTR TO lh)"*/
  179. PROC p_FreeFileNode(list:PTR TO lh)
  180.     DEF n:PTR TO ln
  181.     DEF f:PTR TO filenode
  182.     n:=list.head
  183.     WHILE n
  184.         IF n.succ<>0
  185.             f:=n
  186.             dWriteF(['FreeHandle \h\n'],[f.handle])
  187.             IF f.handle<>0 THEN CloseAmigaGuide(f.handle)
  188.             IF f.newag<>0 THEN Dispose(f.newag)
  189.         ENDIF
  190.         n:=n.succ
  191.     ENDWHILE
  192. ENDPROC
  193. /**/
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.